/*
 * File:   dat_quene.h
 * Author: aple
 */

#ifndef __DAT_QUENE_H_H_
#define __DAT_QUENE_H_H_

#include "stdint.h"

#ifdef __cplusplus
extern "C"
{
#endif

	/* data quene, fifo mode*/
	typedef struct
	{
		uint16_t next_fill;
		uint16_t next_get;
		uint16_t element_amount;
		uint16_t element_size;
		void *buff;
	} com_quene_type;

	uint8_t com_quene_fill(com_quene_type *quene, void *dat); // return : 0-err, 1-ok
	uint8_t com_quene_get(com_quene_type *quene, void *dat);  // return : 0-err, 1-ok
	uint16_t com_quene_used_amount(com_quene_type *quene);	  // return : amount
	uint16_t com_quene_remain_amount(com_quene_type *quene);  // return : amount

	// 功能同上，内部使用16bit拷贝，速度更快。要求元素对齐2B边界，且尺寸为2的倍数。
	uint8_t com_quene16_fill(com_quene_type *quene, void *dat); // return : 0-err, 1-ok
	uint8_t com_quene16_get(com_quene_type *quene, void *dat);	// return : 0-err, 1-ok

	// 功能同上，内部使用32bit拷贝，速度更快。要求元素对齐4B边界，且尺寸为4的倍数。
	uint8_t com_quene32_fill(com_quene_type *quene, void *dat); // return : 0-err, 1-ok
	uint8_t com_quene32_get(com_quene_type *quene, void *dat);	// return : 0-err, 1-ok

#ifdef __cplusplus
}
#endif

#endif /* __DAT_QUENE_H_H_ */
